package person.drf.shop.product.jucTest;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

@Data
@NoArgsConstructor
@AllArgsConstructor
class User{
    private Integer id;
    private String username;
    private int age;
}

/*
  题目:请按照给出数据，找出同时满足以下条件的用户，也即以下条件全部满足
  偶数ID且年龄大于24且用户名转为大写且用户名字母倒排序
  只输出一个用户名字
 */

public class StreamDemo {
    public static void main(String[] args) {
        User u1 = new User(11,"a",21);
        User u2 = new User(12,"b",22);
        User u3 = new User(13,"c",28);
        User u4 = new User(14,"d",29);
        User u5 = new User(15,"e",55);
        List<User> users = Arrays.asList(u1,u2,u3,u4,u5);

        users.stream().filter(u ->{         //filter里面需要传入一个Predicate断定型接口
            return u.getId() % 2==0;        //首次筛选
        }).filter(u->{
            return u.getAge()>24;
        }).map(u->{                         //map里面需要传入Function函数型接口
            return u.getUsername().toUpperCase();   //名字变大写
        }).sorted().limit(1).forEach(System.out::println);




    }

    private static void functionDemo() {
        //        Function<String,Integer> function = s ->{  // s就是传入的参数
//          return s.length();
//        };
//        System.out.println(function.apply("123"));

//        Predicate<String> predicate = new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.isEmpty();
//            }
//        };
//
//        Predicate<String> predicate1 = s->{return s.isEmpty();};
//        System.out.println(predicate1.test("111"));

//        Consumer<String> consumer = new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println("consumer没有返回值,只有传入参数");
//            }
//        };
//
//        Consumer<String> consumer1 = s ->{System.out.println("consumer没有返回值,只有传入参数");};
//        consumer1.accept("111");

//        Supplier<String> stringSupplier = new Supplier<String>() {
//            @Override
//            public String get() {
//                return "没有输入参数，只有返回值";
//            }
//        };
//        Supplier<String> stringSupplier1 = () ->{return "没有输入参数，只有返回值";};
//        System.out.println(stringSupplier.get());
    }
}
